home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 8 / FM Towns Free Software Collection 8.iso / t_os / edo / rex / rex_uty.doc < prev    next >
Text File  |  1994-06-01  |  18KB  |  613 lines

  1.             F-BASIC386用REXユーティリティ
  2.     
  3.                             OcToh[オクト]
  4.  
  5. [はじめに]
  6.  
  7.  本パッケージは,F-BASIC386(以下FB386)上で,標準コマンドだけでは実現できない様な
  8. 操作を行いたい場合に便利と思われるルーチン群を集めた物です.
  9.  
  10. [ファイル構成]
  11.  
  12.   パッケージ1    ディスクおよびメモリ関係ユーティリティ
  13.   
  14.       BAS_LIB.REX    REXファイル本体
  15.   
  16.   パッケージ2    スライド辞書方式圧縮復元プロシジャ
  17.   
  18.       SLIDE.REX    REXファイル本体
  19.       DEENTEST.BAS    サンプルプログラム
  20.   
  21.   パッケージ3    EGBコールユーティリティ
  22.   
  23.       EGBCALL.REX    REXファイル本体
  24.       EGBCALL.BAS    サンプル(テキスト画面に線を描く)
  25.       EGBCALL.ASM    ソースファイル
  26.   
  27.   
  28. [REX詳細]
  29.   
  30.  ・BAS_LIB.REX
  31.       本プロシジャは、ディスク関係の情報入手とキーボードのシフト状態、高速な
  32.       任意バイト数のファイルの読み書き、メモリ操作等を提供します。
  33.  
  34. ●機械語ルーチンの種類
  35.  
  36.       ルーチン番号  機能
  37.          0    ファイル名の探索(取り込み)
  38.          1    カレント・ディスクの取得
  39.          2    カレント・ディレクトリの取得
  40.          3    カレント・ディスクの移動
  41.          4    カレント・ディレクトリの変更
  42.          5    ファイルの属性の取得
  43.          6    システム情報の設定
  44.          7    システム情報の取得
  45.          8    キーボードのシフト状態(カナ,SHIFT,CTRL,親指シフト)読取
  46.          9    ブロック転送
  47.         10    ブロックフィル(1値で埋める)
  48.         11    ファイル書き出し
  49.         12    ファイル読み込み
  50.         13    リザーブ
  51.         14    ファイルサイズ取得
  52.         15    文字列検索
  53.         16    ファイル作成&書き出し
  54.         17    PSP領域からの読み込み
  55.         18    PSP領域への書き込み
  56.  
  57.  
  58.  ●ルーチン詳細
  59.     
  60.     以下に呼び出し方と、パラメータの説明をします。
  61.     なお、パラメータ最初のcmdは、REXアドレスをロードしたオフセットを示します。
  62.     
  63.  
  64.   ◆     0    ファイル名の探索(取り込み)
  65.      
  66.     RET&=CALLM (cmd,0,SearchFile,FNBuf,FileAtt,SearchFlag )
  67.  
  68.          0:    ルーチン番号
  69.  
  70.     SearchFile:    捜すファイル名の文字変数アドレスポインタ
  71.             ファイル名の最後は必ずCHR$(0)が付いていること
  72.     FNBuf      :    返されたファイル名を格納する文字変数アドレスポインタ
  73.     FileAtt      :    捜すファイルの属性(以下のビットをたてて指定する)
  74.  
  75.                    4   3   2   1   0  (ビット)
  76.                 -+---+---+---+---+---+
  77.                  |(3)|   |(2)|(1)|   |
  78.                 -+---+---+---+---+---+
  79.  
  80.                     (1) 隠しファイル
  81.                     (2) システムファイル
  82.                     (3) サブ・ディレクトリ
  83.  
  84.             指定した属性のファイルと通常のファイルが対象になります
  85.             
  86.     SearchFlag:    0なら最初に一致するファイルの探索
  87.             1なら次に一致するファイルの探索
  88.     
  89.     RET&        0なら正常終了
  90.             -1,-2ならエラー発生(SearchFlagが0なら-1,1なら-2)
  91.     
  92.      正常終了ならFNBufにファイル名が入り、文字変数の先頭に探索したファイルが
  93.      ディレクトリかファイルかのマークが付いている
  94.      ディレクトリなら大文字のD、ファイルなら大文字のFが付いているファイル名は    2文字目以降である
  95.  
  96.  
  97.  
  98.   ◆     1    カレント・ディスクの取得
  99.      
  100.     RET&=CALLM (cmd,1)
  101.  
  102.          1:    ルーチン番号
  103.  
  104.     RET&      :    取得したカレント・ディスクのASCIIコード
  105.  
  106.   ◆     2    カレント・ディレクトリの取得
  107.      
  108.     RET&=CALLM (cmd,2,CRDCode,GCRDNBuf)
  109.  
  110.          2:    ルーチン番号
  111.  
  112.     CRDCode      :    カレントディレクトリを取得する対象のディスクのASCII
  113.             コード
  114.     GCRDNBuf  :    取得したカレントディレクトリ名を格納する文字変数のアド
  115.             レスポインタ(文字変数は、あらかじめ65バイト以上、確保して
  116.             おくこと)
  117.     RET&      :    0なら正常終了
  118.             -1ならエラー(指定したドライブが無効)
  119.         
  120.   ◆     3    カレント・ディスクの移動
  121.      
  122.      CALLM cmd,3,CRDCode
  123.      
  124.          3:    ルーチン番号
  125.  
  126.     CRDCode      :    変更するカレントディスクのASCIIコード
  127.      
  128.   ◆     4    カレント・ディレクトリの変更
  129.  
  130.      CALLM cmd,4,GCRDNBuf
  131.  
  132.          4:    ルーチン番号
  133.  
  134.     GCRDNBuf  :    変更するカレントディレクトリ名を格納した文字変数のアド
  135.             レスポインタ
  136.             ディレクトリ名の最後は必ずCHR$(0)が付いていること
  137.  
  138.  
  139.   ◆     5    ファイルの属性の取得
  140.  
  141.     RET&=CALLM(cmd,5,AnlFile)
  142.     
  143.          5:    ルーチン番号
  144.  
  145.     AnlFile      :    調べるファイル名の文字変数アドレスポインタ
  146.             ファイル名の最後は必ずCHR$(0)が付いていること
  147.     
  148.     RET&      :    &hffffxxxxならエラー(xxxxはDOS-Extenderエラーコード)
  149.               エラーコード: 1  AL内のファンクションコードが無効
  150.                     2  ファイルがない
  151.                     3  パスがない
  152.                     5  属性を変更できない
  153.  
  154.             その他は、属性が以下のビット構成で取得される
  155.             
  156.                     5   4   3   2   1   0  (ビット)
  157.                 --+---+---+---+---+---+---+
  158.                   |(6)|(5)|(4)|(3)|(2)|(1)|
  159.                 --+---+---+---+---+---+---+
  160.  
  161.                     (1)  0:リード/ライト
  162.                          1:リードオンリー
  163.                     (2)  0:通常ファイル
  164.                          1:隠しファイル
  165.                     (3)  0:通常ファイル
  166.                          1:システムファイル
  167.                     (4)  1:ボリュームラベル
  168.                     (5)  1:サブ・ディレクトリ
  169.                     (6)      保存ビット
  170.  
  171.   ◆     6    ファイルの属性の設定
  172.  
  173.     RET&=CALLM(cmd,6,AnlFile,AtrBit)
  174.     
  175.          6:    ルーチン番号
  176.  
  177.     AnlFile      :    設定するファイル名の文字変数アドレスポインタ
  178.             ファイル名の最後は必ずCHR$(0)が付いていること
  179.     AtrBit      :    設定する属性(属性のビット構成は「ファイル属性の取得」を
  180.             参照してください。ただし、(4),(5)は設定できません)
  181.  
  182.     RET&      :    0なら正常終了
  183.             その他はエラーコード(「ファイル属性の取得」参照)
  184.  
  185.   ◆     7    システム情報の取得
  186.  
  187.      CALLM cmd,7,SystemInfo)
  188.  
  189.          7:    ルーチン番号
  190.  
  191.     SystemInfo:    システム情報の取得場所の文字変数アドレスポインタ
  192.             (文字変数は、あらかじめ200バイト以上、確保しておくこと)
  193.             システム情報の格納形式は、FM TOWNSテクニカルデータブック
  194.             の拡張サービスルーチン「システム情報の取得」を参照してく
  195.             ださい
  196.  
  197.   ◆     8    キーボードのシフト状態(カナ,SHIFT,CTRL,親指シフト)読取
  198.  
  199.     RET&=CALLM(cmd,8)
  200.     
  201.          8:    ルーチン番号
  202.  
  203.     RET&      :    シフト状態が格納される
  204.                  7   6   5   4   3   2   1   0  (ビット)
  205.                 +---+---+---+---+---+---+---+---+
  206.                 |(8)|(7)|(6)|(5)|(4)|(3)|(2)|(1)|
  207.                 +---+---+---+---+---+---+---+---+
  208.  
  209.                     (1)  CAP(英大/英小)       ※3
  210.                     (2)  カナキー                 ※2
  211.                     (3)  SHIFTキー
  212.                     (4)  GRAPHキー(常に0)
  213.                     (5)  CTRLキー
  214.                     (6)  右親指シフトキー         ※1
  215.                     (7)  左親指シフトキー         ※1
  216.                     (8)  常に0
  217.                         (キー状態 0:OFF 1:ON)
  218.  
  219.                         ※1 親指シフトキーボードで有効
  220.                         ※2 仮名の時ON (1)
  221.                         ※3 英大モード時にON (1)
  222.  
  223.   ◆     9    ブロック転送
  224.  
  225.      CALLM cmd,9,SSel,SAd,DSel,DAd,NBytes
  226.  
  227.          9:    ルーチン番号
  228.  
  229.     SSel      :    転送元セレクタ値(セレクタ値の詳細は、BASICマニュアルの、
  230.             PEEKコマンドを参照してください。値によってはVRAM等もア
  231.             クセス可能です)
  232.     SAd      :    転送元先頭アドレス
  233.     DSel      :    転送先セレクタ値
  234.     DAd      :    転送先先頭アドレス
  235.     NBytes      :    転送バイト数
  236.     
  237.  
  238.   ◆    10    ブロックフィル(1値で埋める)
  239.  
  240.      CALLM cmd,10,Sel,Ad,FillV,Number,Type
  241.     
  242.         10:    ルーチン番号
  243.  
  244.     Sel      :    出力先セレクタ値(セレクタ値の詳細は、BASICマニュアルの、
  245.             PEEKコマンドを参照してください。値によってはVRAM等もア
  246.             クセス可能です)
  247.     Ad      :    出力先先頭アドレス
  248.     FillV      :    出力する値(Typeの値によって1~4バイト)
  249.     Number      :    FillVの値を何回出力するか
  250.     Type      :    FillVの数値タイプ
  251.             (下記以外の値を指定した場合は1を指定したとみなします)
  252.                 1: Byte
  253.                 2: Word
  254.                 4: DWord
  255.  
  256.   ◆    11    ファイル書き出し
  257.  
  258.     RET&=CALLM(cmd,11,Sel,Ad,FileName,SeekOffset,NBytes)
  259.  
  260.         11:    ルーチン番号
  261.  
  262.     Sel      :    バッファセレクタ値(セレクタ値の詳細は、BASICマニュアルの
  263.             PEEKコマンドを参照してください。値によってはVRAM等もアク
  264.             セス可能です)
  265.     Ad      :    バッファ先頭アドレス
  266.     FileName  :    アクセスするファイル名の文字変数アドレスポインタ
  267.             ファイル名の最後は必ずCHR$(0)が付いていること
  268.     SeekOffset:    ファイルの先頭から何バイト目から書き出すかを指定
  269.     NBytes      :    何バイト書き出すかを指定
  270.     
  271.         本ルーチンは、実行する毎にファイルのオープン/クローズを行う様に
  272.         なっています。
  273.         何回かに分けてデータを書き出したい場合は、SeekOffsetの値を毎回、
  274.         適切に指定してください(「ファイルサイズ取得」で得たサイズを
  275.         SeekOffsetに使用するとデータがファイルの後ろに追加されていきま
  276.         す)
  277.         もしくは、SeekOffsetに-1を指定すると書き始めの位置をファイルの一
  278.         番最後に設定しますので、こちらを利用して後ろに後ろにと、データを
  279.         追加していくこともできます。
  280.         本ルーチンを使用する場合は、あらかじめ、ディスク上に書き込むファ
  281.         イルが存在している必要があります。
  282.         OPEN "O"コマンド等で、ファイルを作成してから実行してください。
  283.         (OPEN "O"コマンドを発効してすぐにCLOSEをすれば、OPENコマンドで指
  284.         定したファイル名でサイズ0のファイルが作成されます)
  285.  
  286.     RET&    0なら正常終了
  287.         その他はエラー(以下のエラーコードが返される)
  288.              1:ファイルシェアリングコード無効(ルーチン内エラー)
  289.              2:ファイルが無い
  290.              3:パスがない
  291.              4:オープンファイルが多すぎる
  292.              5:アクセスが拒否された
  293.              6:ハンドルが無効(ルーチン内エラー)
  294.             12:ファイルアクセスコードが無効(ルーチン内エラー)
  295.  
  296.   ◆    12    ファイル読み込み
  297.  
  298.     RET&=CALLM(cmd,12,Sel,Ad,FileName,SeekOffset,NBytes)
  299.  
  300.         12:    ルーチン番号
  301.  
  302.     Sel      :    バッファセレクタ値(セレクタ値の詳細は、BASICマニュアルの
  303.             PEEKコマンドを参照してください。値によってはVRAM等もアク
  304.             セス可能です)
  305.     Ad      :    バッファ先頭アドレス
  306.     FileName  :    アクセスするファイル名の文字変数アドレスポインタ
  307.             ファイル名の最後は必ずCHR$(0)が付いていること
  308.     SeekOffset:    ファイルの先頭から何バイト目から読み込むかを指定
  309.     NBytes      :    何バイト読み込むかを指定
  310.     
  311.         本ルーチンは、実行する毎にファイルのオープン/クローズを行う様に
  312.         なっています。
  313.         何回かに分けてデータを読み込みたい場合は、SeekOffsetの値を毎回、
  314.         適切に指定してください
  315.  
  316.     RET&    0なら正常終了
  317.         その他はエラー(「ファイル書き出し」を参照してください)
  318.  
  319.   ◆    13    リザーブ(未使用です)
  320.     
  321.   ◆    14    ファイルサイズ取得
  322.  
  323.     RET&=CALLM(cmd,14,FileName)
  324.  
  325.         14:    ルーチン番号
  326.  
  327.     FileName  :    サイズを調べるするファイル名の文字変数アドレスポインタ
  328.             ファイル名の最後は必ずCHR$(0)が付いていること
  329.  
  330.     RET&      :    最上位ビットが0ならファイルサイズ(正常終了)
  331.             最上位ビットが1ならそれ以外のビットはエラーコードが入る
  332.                  1:コード無効(ルーチン内エラー)
  333.                  2:ファイルが無い
  334.                  3:パスがない
  335.                  4:オープンファイルが多すぎる
  336.                  5:アクセスが拒否された
  337.                  6:ハンドルが無効(ルーチン内エラー)
  338.                 12:ファイルアクセスコード無効(ルーチン内エラー)
  339.  
  340.   ◆    15    文字列検索
  341.  
  342.     RET&=CALLM(cmd,15,Ad,DataPat)
  343.  
  344.         15:    ルーチン番号
  345.  
  346.     Ad      :    文字列データが格納されているアドレス(データの最後には
  347.             少なくともDataPatと同じ長さのchr$(0)が付いていること)
  348.             文字変数を渡す時はPEEK(VARPTR(変数),4)とする
  349.     DataPat      :    検索する文字パターンが格納されているアドレス(パターン
  350.             の最後はchr$(0)が付いていること)
  351.             文字変数を渡す時はPEEK(VARPTR(変数),4)とする
  352.  
  353.     RET&        0なら文字パターンは見つからなかった
  354.             それ以外なら、先頭からのオフセットバイト数が入る
  355.  
  356.   ◆    16    ファイル作成&書き出し
  357.  
  358.     RET&=CALLM(cmd,16,Sel,Ad,FileName,SeekOffset,NBytes)
  359.  
  360.         16:    ルーチン番号
  361.  
  362.     Sel      :    バッファセレクタ値(セレクタ値の詳細は、BASICマニュアルの
  363.             PEEKコマンドを参照してください。値によってはVRAM等もアク
  364.             セス可能です)
  365.     Ad      :    バッファ先頭アドレス
  366.     FileName  :    アクセスするファイル名の文字変数アドレスポインタ
  367.             ファイル名の最後は必ずCHR$(0)が付いていること
  368.     SeekOffset:    0を指定
  369.     NBytes      :    何バイト書き出すかを指定
  370.     
  371.         本ルーチンは、実行する毎にファイルのオープン/クローズを行う様に
  372.         なっています。
  373.         何回かに分けてデータを書き出したい場合は、本ルーチンを使用後、
  374.         ファイル書き出しルーチンを使用して下さい。
  375.         本ルーチンを使用する場合に、すでにディスク上に書き込むファイル
  376.         と同一ファイル名が存在していると、そのファイルは内容がクリアさ
  377.         れます。
  378.  
  379.     RET&    0なら正常終了
  380.         その他はエラー(「ファイル書き出し」を参照してください)
  381.  
  382.   ◆    17    PSP領域からの読み込み
  383.  
  384.      CALLM cmd,17,Point,NBytes,Ad
  385.  
  386.         17:    ルーチン番号
  387.  
  388.     Point      :    PSP領域の何バイト目から読み込むかを指定
  389.     NBytes      :    何バイト読み込むかを指定
  390.     Ad      :    バッファ先頭アドレス
  391.  
  392.   ◆    18    PSP領域への書き込み
  393.  
  394.      CALLM cmd,18,Point,NBytes,Ad
  395.  
  396.         18:    ルーチン番号
  397.  
  398.     Point      :    PSP領域の何バイト目から書き込むかを指定
  399.     NBytes      :    何バイト書き込むかを指定
  400.     Ad      :    バッファ先頭アドレス
  401.  
  402.  
  403.  ・SLIDE.REX
  404.       本プロシジャは、スライド辞書方式による圧縮/復元を行います。
  405.       データの大きさは32バイト以上のデータを与えるようにしてください。
  406.       内部に静的バッファ領域を確保しているためファイルサイズが少々大きいです
  407.       がこれによってかなりの効率でデータを圧縮できますのでお許し下さい。
  408.  
  409. ●機械語ルーチンの種類
  410.  
  411.       ルーチン番号  機能
  412.          0    データの圧縮
  413.          1    データの復元
  414.  
  415.  ●ルーチン詳細
  416.     
  417. poff    以下に呼び出し方と、パラメータの説明をします。
  418.     なお、パラメータ最初のcmdは、REXアドレスをロードしたオフセットを示します。
  419.     
  420.  
  421.   ◆    0    データの圧縮
  422.   
  423.       RET&=CALLM(cmd,0,Outbuf,Inbuf,Size,BSize,FileNameAd,MaxFlg)
  424.  
  425.          0:    ルーチン番号
  426.  
  427.     Outbuf      :    データ出力用一時バッファ先頭アドレス
  428.     Inbuf      :    圧縮対象データ格納アドレス
  429.     Size      :    圧縮対象データサイズ
  430.     BSize      :    データ出力用一時バッファサイズ
  431.     FileNameAd:    ファイル名データが格納されているアドレス
  432.             ファイル名の最後は必ずCHR$(0)が付いていること
  433.             文字変数を渡す時はPEEK(VARPTR(変数),4)とする
  434.     MaxFlg      :    0ならば出力データのサイズがsizeの値を越えても、最後まで
  435.             圧縮操作を続ける
  436.             0以外なら出力データサイズがsizeの値を越えた時点で終了し
  437.             ます
  438.  
  439.     RET&      :     1以上の場合    圧縮された後のデータサイズ
  440.              0        圧縮対象データサイズが小さすぎて圧縮で
  441.                     きなかった
  442.             -2        MaxFlgが1の場合で、出力データの方が、元の
  443.                     データサイズを越えた
  444.             &hffffxxxx    ディスクアクセス時にエラーが発生した
  445.                     xxxxの値はBAS_LIB.REX「ファイル書き出し」
  446.                     を参照してください
  447.  
  448.         本プロシジャは、実行すると圧縮終了までFB386に制御が戻りません。
  449.         プロシジャ内でファイルのオープン/クローズを行ないます。
  450.         本プロシジャを使用する場合に、ディスク上に指定されたファイルと同
  451.         じファイル名のファイルが存在していると、その内容は書き換えられま
  452.         す。存在しない場合は新たに指定ファイル名で作成されます。
  453.         空き領域のサイズは、最高でMaxFlgで1を指定した場合は、元データのサ
  454.         イズにBSizeを加えた大きさだけ必要となる場合があります。
  455.         MaxFlgが0の場合は、予測できません。
  456.         データを復元するには元のデータサイズが必要となりますので、出来た
  457.         ファイルに対して、元のデータサイズを記録する操作が必要です。
  458.         圧縮対象データはメモリ上に存在する必要があります。
  459.         詳しくはサンプルをごらんください。
  460.  
  461.  
  462.   ◆    1    データの圧縮
  463.   
  464.       RET&=CALLM(cmd,1,Outbuf,Inbuf,Size,BSize,FileNameAd,RSize)
  465.  
  466.          1:    ルーチン番号
  467.  
  468.     Outbuf      :    出力データ格納領域先頭アドレス
  469.     Inbuf      :    圧縮データ格納アドレス
  470.     Size      :    元データサイズ
  471.     BSize      :    0(未使用)
  472.     FileNameAd:    0(未使用)
  473.     RSize      :    圧縮データのサイズ
  474.  
  475.     RET&      :     1以上の場合    復元された後のデータサイズ
  476.              それ以外    与えられたデータに以上があり、正確な復元
  477.                     ができなかった
  478.  
  479.         本ルーチンは、実行すると復元終了までFB386に制御が戻りません。
  480.         データを復元するには元のデータサイズが必要となります。
  481.         入力/出力データはメモリ上に存在します。
  482.         詳しくはサンプルをごらんください。
  483.  
  484. [サンプル説明]
  485.   
  486.   BAS_LIB.REXの方はサンプルプログラムは機能が多すぎるので、つけていません。
  487.   ご質問が有る場合は、FFMHOBの会議室で著者宛にお尋ね下さい。
  488.   なお、著者作成の最近のプログラムはほとんどが本ルーチンか、本ルーチンのコンパク
  489.   ト版を用いているので、そちらをダウンロードして参考にしてもいいかと思います。
  490.   (ColorfulStick、AmazingPAINT等、両方ともFFMAVのDL 1に有ります。)
  491.   コンパクト版でもルーチン番号は共通にしてあります。
  492.  
  493.  ・ENDETEST.BAS
  494.  
  495.     FB386上で、ディスク上にあるファイルをスライド辞書方式で圧縮/復元するプ
  496.     ログラムサンプル。圧縮/復元にSLIDE.REXを、メモリとディスクとのやり取りに
  497.     BAS_LIB.REXを使用しています。
  498.     
  499.     圧縮時は50行の
  500.     
  501.     *ENCODE:F$="a:\sample.tif"+CHR$(0):FO$="a:\sample.cmp"+CHR$(0)
  502.     
  503.     F$に入力ファイル名、FO$に出力(圧縮)ファイル名をセットしてください。
  504.     
  505.     展開時は200行の
  506.     
  507.     *DECODE:FI$="a:\sample.cmp"+CHR$(0):FD$="a:\samplorg.tif"+CHR$(0)
  508.     
  509.     FI$に入力(圧縮済)ファイル名、FD$に出力(復元)ファイル名をセットしてくだ
  510.     さい。
  511.     
  512.     プログラムを実行すると、
  513.     
  514.     get started! (E : Encode / D : Decode)
  515.     
  516.     とメッセージがでますので、圧縮のときはEを、復元の時はDを入力してください。
  517.     
  518.     ・圧縮時のデータ出力はSLIDE.REX内のファイル出力ルーチンを用いて、自力で
  519.      行っています
  520.     ・復元時はデータ入力・出力ともメモリ内にあることが前提ですのでBAS_LIB.REX
  521.      を用いています
  522.      
  523.     
  524.     
  525.  ・EGBCALL.REX
  526.  本プロシジャは,F-BASIC386(以下FB386)上からEGBをコールするために作成した機械語
  527.  ファイルです。
  528.  利用時はアセンブラと同等の呼出し方法を取りますので、アセンブラ使用時のEGBの呼出
  529. し方の知識を有する方以外には使用は難しいかも知れません。
  530.  本パッケージにはEGBの呼出し時のパラメータの説明は付属されませんので、ユーザ自身
  531.  で、関係資料を用意してください(FM TOWNSテクニカルデータブック[通称"赤本"と呼ば
  532.  れている本]、Towns BIOSリファレンス等)。
  533.  
  534.  ただし、FB386の将来のバージョンアップに際して、完全に動作を保証できるものではあ
  535.  りません。
  536.  
  537. [呼出し方法]
  538.  
  539.         rexadはREXルーチンロードアドレスを示します。
  540. ・イニシャライズ時
  541.  (本プロシジャをロードしたあとに必ず1回コールしてください)
  542.  
  543.     callm rexad,CMD,STACK,WORK,SIZE
  544.     
  545.         CMD    :    0を指定
  546.         STACK    :    ユーザが用意したスタックエリアの最後尾アドレス
  547.         WORK    :        〃    EGBワークエリアの先頭アドレス
  548.         SIZE    :            〃        のサイズ
  549.  
  550. ・EGB機能利用時
  551.  
  552.     callm rexad,CMD,AL,EBX,ECX,EDX,ESI,RETAD
  553.  
  554.         CMD    :    実行する機能をセット(AHレジスタに設定する値)
  555.         AL    :    ALレジスタに設定する値
  556.         EBX    :    EBXレジスタに設定する値
  557.         ECX    :    ECXレジスタに設定する値
  558.         EDX    :    EDXレジスタに設定する値
  559.         ESI    :    ESIレジスタに設定する値
  560.         RETAD    :    機能終了時のレジスタ値の格納領域の先頭アドレス
  561.                 領域の設定(&h2C)とポイント識別(&h4F)等を使用する                時に使用。
  562.                 ここに0をセットすると、レジスタ値を返さない
  563. ・返り値
  564.  
  565.     本ルーチンを関数呼出し(ret&=callm(...)の形式で呼び出した時)は、AHにセッ
  566.     トされているエラー情報の値が得られます。
  567.     
  568.     また、前述してありますが、RETADにレジスタ値をセットする領域の先頭アドレス
  569.     (0以外)を設定することで、REX内部でEGB呼出しより復帰した時の各レジスタの
  570.     内容を得ることが可能です。
  571.     領域は24バイト必要です。格納形式を以下に示します。
  572.     0を指定した場合は領域の変更は行いません(できません)。
  573.     
  574.         先頭→  (4バイト)    EAX
  575.             (   〃  )    EBX
  576.             (   〃  )    ECX
  577.             (   〃  )    EDX
  578.             (   〃  )    ESI
  579.             (   〃  )    EDI
  580.  
  581.     以上です。
  582.     具体的な使用例はサンプルを参照してください。
  583.  
  584. [権利等]
  585.     本ルーチン集の基本的部分の著作権は私、OcToh[オクト]が所有しています。
  586.     SLIDE.REXの圧縮部分本体は、参考文献1のソースリストを全体的に参考にして
  587.     BASICのREX用にデータ入出力ルーチン部を改造したものです。
  588.  
  589.     本ルーチン(REXファイル本体)の使用に関しては著作者の権利を侵さないかぎ
  590.     り自由とします。
  591.     つまり、著作権者を偽って配付等しないかぎり使用に関して制限を設けません。
  592.     自作のF-BASIC386プログラムに添付して配付しても、ルーチンの作者を偽らな
  593.     ければ有料/無料に係わらず自由です。
  594.     ただし、本パッケージそのものとか、本パッケージの1部分のみを有料で配付す
  595.     る事は営利/非営利を問わず禁止させていただきます(1部分のみの場合は無料
  596.     でも不可)。
  597.     再配付は、著作権者の許可を得た上で行ってください。
  598.     
  599.     本ルーチンの運用の結果につきましては、一切の義務/責任を負うことはできま
  600.     せん。各自の責任の範囲内で御使用下さい。
  601.     
  602. 参考文献
  603.     1    C言語による最新アルゴリズム辞典   奥村晴彦著
  604.                 技術評論社
  605.     2    Oh!FM 1991年8月号 「High CだけでREXファイルを作ろう」
  606.                 ソフトバンク
  607.     3    386DOS|EXTENDERユーザーズマニュアル
  608.                 富士通
  609.     4    Towns BIOSリファレンス
  610.                 富士通
  611.     5    FM TOWNSテクニカルデータブック 千葉憲昭 著
  612.                 アスキー
  613.